﻿using MediatR;
using System.Collections.Generic;

namespace Apex.DomainCommons.Models
{
    /// <summary>
    /// 定义领域事件管理接口，用于管理领域模型中的事件。
    /// </summary>
    public interface IDomainEvents
    {
        /// <summary>
        /// 获取当前领域模型中的所有领域事件。
        /// </summary>
        /// <returns>领域事件的可枚举集合。</returns>
        IEnumerable<INotification> GetDomainEvents();

        /// <summary>
        /// 将指定的领域事件添加到事件列表。
        /// </summary>
        /// <param name="eventItem">要添加的领域事件。</param>
        void AddDomainEvent(INotification eventItem);

        /// <summary>
        /// 如果事件列表中不存在相同的事件，则将指定的领域事件添加到事件列表中。
        /// </summary>
        /// <param name="eventItem">要添加的领域事件。</param>
        void AddDomainEventIfAbsent(INotification eventItem);

        /// <summary>
        /// 清除当前领域模型中的所有领域事件。
        /// </summary>
        void ClearDomainEvents();
    }

}
